跳到主要内容

训练一个分割器

本指南介绍如何设置和配置 OV20i 的分割功能,以自动检测、测量和分析部件中的特定特征或缺陷。需要识别不规则形状、测量面积,或检测无法通过简单分类处理的特征时,请使用分割。

备注

Ov10i 不具备分割功能。

何时使用分割: 表面缺陷、液体溢漏、不规则形状、面积测量、图案检测,或任何需要像素级精确度的特征。

开始前

您需要的内容

  • 已设置并连接的 OV20i 摄像系统
  • 带有要分割特征的测试件(例如带铅笔标记的薄片)
  • 适用于您特定应用的良好照明条件
  • 15-20 张用于训练的示例图像

第 1 步:创建分割配方

1.1 新建配方

  1. 打开“All Recipes”页面
  2. 点击 + New Recipe(右上角)
  3. 输入配方名称:使用描述性名称,如 "Pencil_Mark_Detection" 或 "Surface_Defect_Segmentation"
  4. 选择配方类型:从下拉菜单中选择 "Segmentation"
  5. 点击 OK 以创建

新建

1.2 激活配方

  1. 在列表中找到您的配方(显示为“Inactive”)
  2. 点击 Actions > Activate
  3. 点击 Activate 以确认

激活配方

结果:配方现已处于激活状态,可进行配置。

第 2 步:访问配方编辑器

  1. 点击您已激活配方旁边的 Edit
  2. 点击 Open Editor 以确认

编辑

您现在将看到带有分割相关选项的配方编辑器。

第 3 步:配置相机设置

3.1 打开成像配置

  1. 点击 Configure Imaging(左下角)

配置成像

3.2 为分割优化对焦

对边缘检测的准确性,聚焦至关重要:

  1. 将测试件放置在相机视图中
  2. 调整对焦,直到边缘清晰锐利
  3. 对不同工件进行测试,以确保在整个范围内对焦一致
提示
  • 将焦点放在缺陷/特征将出现的表面
  • 确保感兴趣区域的整个区域处于清晰对焦
  • 对分割而言,略微过度锐化比软焦更佳

3.3 设置最佳曝光

正确曝光可确保特征检测的一致性:

  1. 调整曝光,以实现均衡照明
  2. 避免过曝区域(纯白区域)
  3. 在良好对比度下确保特征可见

分割曝光指南:

  • 特征应与背景具有清晰对比
  • 避免可能被误认为缺陷的阴影
  • 使用各种工件条件进行测试(清洁、污脏、磨损)

3.4 配置 LED 照明模式

根据要分割的对象选择照明:

特征类型推荐照明原因
表面缺陷明场照明均匀照明显示表面不规则性
划痕/裂纹侧光照明阴影突出线性缺陷
凸起特征暗场照明使凸起区域从背景中突出
液体溢出侧光照明显示表面纹理差异

3.5 调整伽马以提升特征对比度

  1. 提高伽马值以增强特征与背景之间的对比度
  2. 在查看目标特征时测试不同的伽马值
  3. 找到使特征最易区分的设置

3.6 保存配置

  1. 在实时预览中查看设置
  2. 点击 Save Imaging Settings

Save Settings

检查点: 特征在对比度良好时应清晰可见。

第 4 步:设置模板和对齐

4.1 导航至模板部分

点击 "Template Image and Alignment" 在面包屑菜单中

4.2 配置对齐(可选)

Template and alignment

在本示例中,我们将跳过对齐:

  1. 如果零件位置保持一致,请选择 Skip Aligner
  2. 点击 Save

Template image

何时使用 Aligner: 当零件到达的位置或方向不同,可能影响分割的准确性时启用。

第 5 步:定义检测区域

5.1 导航至 检测设置

点击 "Inspection Setup" 在面包屑导航中

5.2 设置 ROI(感兴趣区域)

ROI 定义了分割将发生的位置:

  1. 将测试件放置在相机视图中
  2. 拖动 ROI 的角点以框定检测区域
  3. 适当设置 ROI 大小:
    • 包含可能出现特征的所有区域
    • 排除不必要的背景区域
    • 在预期特征位置周围留出缓冲区

ROI Setup

5.3 用于分割的 ROI 最佳实践

执行不执行
覆盖整个检测表面包含无关背景对象
在边缘留出缓冲区使 ROI 对特征变化过小
考虑零件定位变化与夹具或工具的定位重叠
使用最大预期特征进行测试包含带永久标记的区域

5.4 保存 ROI 设置

  1. 验证 ROI 覆盖所有目标区域
  2. 点击 Save

第 6 步:标注训练数据

6.1 导航至 标注与训练

点击 "Label And Train" 在面包屑导航中

6.2 配置检测类别

  1. 在检测类型下点击 Edit
  2. 将类别重命名以匹配您的特征(例如 "Pencil Mark"、"Surface Defect"、"Spill Area")
  3. 选择类别颜色以便可视化识别
  4. 保存更改

6.3 捕获并标注训练图像

您需要至少 10 张带标注的图像,但建议 15-20 张:

图像捕获过程

Label and Train

  1. 将第一件测试件放置在检测区域
  2. 使用相机界面拍摄图像
  3. 使用画笔工具在目标特征上进行着色
  4. 准确着色:
    • 覆盖整个特征区域
    • 保持在特征边界内
    • 不要涂抹背景区域
    • 使用一致的标注方法
  5. 点击 Save Annotations
  6. 对下一个零件重复

标注最佳实践

良好标注不良标注
特征边界精准边缘涂抹粗糙
特征定义一致标准不一致
特征覆盖全面缺失特征区域
背景干净(未涂色)背景涂色意外覆盖

6.4 训练数据多样性

确保你的训练集包含:

  • 不同的特征尺寸
  • 不同的特征强度
  • ROI 内的多个位置
  • 不同的光照条件(如适用)
  • 边缘情况和界线示例

6.5 质量检查训练数据

  1. 审查所有标注的图像
  2. 验证标注方法的一致性
  3. 删除任何标注错误的示例
  4. 如有需要,添加更多示例

步骤 7:训练 Segmentation Model

7.1 开始训练过程

  1. 点击 Return to Live,标注完成后
  2. 点击 Train Segmentation Model

开始训练

7.2 配置训练参数

  1. 设置迭代次数:
    • 快速训练: 50-100 次迭代(5-10 分钟)
    • 生产质量: 200-500 次迭代(15-30 分钟)
    • 高精度: 500+ 次迭代(30+ 分钟)
  2. 点击 Start Training

7.3 监控训练进度

训练进度显示:

  • 当前迭代次数
  • 训练准确率百分比
  • 预计完成时间

训练中

训练控件:

  • Abort Training: 如出现问题时停止
  • Finish Training Early: 当准确度足够时停止

训练 2

提示
  • 85% 准确率通常适用于生产环境
  • 训练在达到目标准确度时自动停止
  • 更多训练数据通常比更多迭代更有效

步骤 8:测试分割性能

8.1 访问实时预览

  1. 点击 Live Preview,训练完成后
  2. 对不同部件进行测试:
    • 已知良品部件(应显示无/极少分割)
    • 已知不良部件(应突出显示缺陷)
    • 边缘情况和界线示例

实时预览

8.2 评估结果

检查分割质量:

指标良好表现需改进
准确性始终发现真实特征容易遗漏明显特征
精确度偶发假阳性较少许多背景区域被高亮显示
边缘质量较干净、准确的边界较粗糙或不准确的边缘
一致性重复测试结果相似结果变化很大

8.3 不良结果的排查

问题可能原因解决方案
缺少特征训练数据不足添加更多已标注的示例
假阳性光照/对比度不足提高成像设置
边缘粗糙图像质量差提高对焦/照明
结果不一致训练样本多样性不足增加更多多样化示例

第 9 步:配置 Pass/Fail Logic

9.1 Access IO Block

  1. 确保 AI 模型显示绿色(训练完成状态)
  2. 通过面包屑导航进入 IO Block

9.2 Remove Default Logic

  1. 删除 Classification Block Logic 节点
  2. 准备构建自定义分割逻辑

9.3 Build Segmentation Flow

Create Node-RED flow with these components:

  1. 从左侧面板拖拽节点:
    • Function node(用于逻辑)
    • Debug node(用于测试)
    • Final Pass/Fail node
  2. 用连线将节点连接起来

NodeRed

9.4 Configure Logic Based on Your Needs

选项 A:若未检测到缺陷则通过

用例: 质量检测中任一检测到的特征均视为不合格

Function Node Code:

const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1; // Pass if no features found
msg.payload = results;
return msg;

选项 B:仅在缺陷较小时通过

用例: 接受小于尺寸阈值的次要缺陷

Function Node Code:

const threshold = 500; // Adjust pixel count threshold
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;

选项 C:若总缺陷面积较小时通过

用例: 接受总缺陷面积有限的部件

Function Node Code:

const threshold = 5000; // Adjust total pixel threshold
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;

9.5 Configure Function Node

  1. 双击 Function node
  2. 从以上示例中复制合适的代码
  3. 粘贴到 "On Message" 选项卡
  4. 为你的应用调整阈值
  5. 点击 Done

9.6 Deploy and Test Logic

  1. 点击 Deploy 以激活逻辑
  2. 进入 HMI 进行测试
  3. 使用已知良品和不良品进行测试
  4. 验证通过/失败结果是否符合预期

Step 10: Production Validation

10.1 Comprehensive Testing

使用以下进行分割系统测试:

测试用例预期结果失败时行动
清洁部件通过(无分割)调整阈值或重新训练
小缺陷根据您的标准通过/不通过精炼逻辑参数
重大缺陷失败(清晰分割)检查模型精度
边缘情况行为一致添加训练数据

10.2 Performance Validation

监控以下指标:

  • 每次检测的处理时间
  • 多次测试的一致性
  • 生产照明下的准确性
  • 长时间运行的可靠性

10.3 Final Adjustments

若性能不令人满意:

  1. 为边缘情况添加更多训练数据
  2. 在逻辑中调整阈值
  3. 改善成像条件
  4. 在额外迭代中重新训练模型

成功!您的 Segmentation System 已就绪

您现在拥有一个可工作的 segmentation system,能够:

  • 自动检测 特定特征或缺陷
  • 以像素级精度测量面积
  • 根据您的需求应用自定义 Pass/Fail Logic
  • 通过 I/O 控制与生产系统集成

高级配置选项

自定义阈值逻辑

对于复杂的验收标准,组合多个条件:

const smallThreshold = 200;
const largeThreshold = 1000;
const maxTotalArea = 3000;

const allBlobs = msg.payload.segmentation.blobs;
const smallBlobs = allBlobs.filter(blob => blob.pixel_count < smallThreshold);
const largeBlobs = allBlobs.filter(blob => blob.pixel_count > largeThreshold);
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_c